import { DatabaseProvider } from "@/lib/db";  // 假设你有一个数据库提供者
import { products, categories, brands } from "@supersavely/db/schema";  // 使用定义好的表结构
import { eq, like } from "drizzle-orm";  // 导入 Drizzle ORM 的查询条件方法

class ProductSearchService {
  private db: DatabaseProvider;

  constructor(db: DatabaseProvider) {
    this.db = db;
  }

  // 根据类别名称检索产品
  async searchByCategory(categoryName: string) {
    // 通过类别名称获取类别 ID，使用 limit(1) 并手动提取第一个结果
    const category = await this.db.database
      .select({ id: categories.id })
      .from(categories)
      .where(eq(categories.name, categoryName))
      .limit(1);  // 限制返回结果为 1 条

    if (category.length === 0) {
      throw new Error(`类别 '${categoryName}' 不存在`);
    }

    const categoryId = category[0].id;

    // 根据类别 ID 查询产品列表
    const productList = await this.db.database
      .select()
      .from(products)
      .where(eq(products.category_id, categoryId));

    return productList;
  }

  // 根据品牌名称检索产品
  async searchByBrand(brandName: string) {
    // 通过品牌名称获取品牌 ID，使用 limit(1) 并手动提取第一个结果
    const brand = await this.db.database
      .select({ id: brands.id })
      .from(brands)
      .where(eq(brands.name, brandName))
      .limit(1);  // 限制返回结果为 1 条

    if (brand.length === 0) {
      throw new Error(`品牌 '${brandName}' 不存在`);
    }

    const brandId = brand[0].id;

    // 根据品牌 ID 查询产品列表
    const productList = await this.db.database
      .select()
      .from(products)
      .where(eq(products.brand_id, brandId));

    return productList;
  }

  // 根据产品名称模糊查询
  async searchByProductName(productName: string) {
    // 模糊查询产品名称
    const productList = await this.db.database
      .select()
      .from(products)
      .where(like(products.name, `%${productName}%`));

    return productList;
  }
}

export default ProductSearchService;
